﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using KaartenLib;

namespace WindowsFormsApplication2
{    

    public class DatabaseActies
    {
        private string connString = "";
        private SqlConnection conn = null;
        private string cmdString = "";
        private SqlCommand cmd = null;


        //db spul


        //fields db tables        
        List<Oefening> oefeningen;
        DateTime datum;
        int moeilijkheid;
        int maxscore;
        List<String> leerlingen;
        List<String> namenLln;

        String opgaveTekst = "";
        String oplossingTekst = "";


        public DatabaseActies()
        {            
            leerlingen = new List<String>();
            namenLln = new List<String>();
            oefeningen = new List<Oefening>();
            connString = Properties.Settings.Default.WiskundeOefeningenConnectionString;
            conn = new SqlConnection(connString);
        }


        #region getters en setters
        public List<Oefening> Oefeningen
        {
            get { return oefeningen; }
            set { this.oefeningen = value; }
        }

        public int Maxscore
        {
            get { return maxscore; }
            set { this.maxscore = value; }
        }

        public int Moeilijkheid
        {
            get { return moeilijkheid; }
            set { this.moeilijkheid = value; }
        }

        public DateTime Datum
        {
            get { return datum; }
            set { this.datum = value; }
        }

        public List<String> Leerlingen
        {
            get { return leerlingen; }
            set { this.leerlingen = value; }
        }

        public List<String> NamenLln
        {
            get { return namenLln; }
            set { namenLln = value; }
        }
        #endregion

        public void insertIntoDatabank()
        {
            //add opdracht
            string date =  datum.Year.ToString()+ "/" + datum.Month.ToString() + "/" + datum.Day.ToString() ;                           
            cmdString = ("INSERT INTO Opdracht (opdrachtDatum,moeilijkheidsGraad,maxScore,status) VALUES ('"+date+"',"+moeilijkheid+","+maxscore+",'Niet Afgewerkt')");
            cmd = new SqlCommand(cmdString,conn);
            conn.Open();
            cmd.ExecuteNonQuery();                        
            conn.Close();

            string opdrachtID = "";
            cmdString = ("SELECT MAX(opdrachtID) FROM Opdracht");
            cmd = new SqlCommand(cmdString,conn);
            conn.Open();
            SqlDataReader myReader;
            myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                 opdrachtID = myReader.GetInt32(0).ToString();                
            }
            myReader.Close();
            conn.Close();

            //add opdracht aan leerlingOpdracht
            for(int i =0;i<leerlingen.Count;i++){
                cmdString = ("INSERT INTO leerlingOpdracht (leerlingID,opdrachtID) VALUES ("+leerlingen[i]+","+opdrachtID+")");
                cmd = new SqlCommand(cmdString,conn);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }

            maakRekenSom(opdrachtID);
            
        }

        public List<Oefening> getOefeningen(String opdrachtID)
        {
            List<Oefening> opdrachten = new List<Oefening>();
            String cmdString = "SELECT opdrachtDetailID, opgaveTekst, oplossingTekst FROM OpdrachtDetail od WHERE od.opdrachtID = '" + this.opdrachtID + "'";
            SqlCommand cmd = new SqlCommand(cmdString, conn);
            conn.Open();
            SqlDataReader myReader;
            myReader = cmd.ExecuteReader();
            while (myReader.Read())
            {
                Oefening oefening = new Oefening();
                oefening.OpdrachtID = myReader.GetInt32(0);
                oefening.KaartenLijstString = myReader.GetString(1);
                oefening.AntwoordenString = myReader.GetString(2);
                opdrachten.Add(oefening);
            }
            myReader.Close();
            conn.Close();


            return opdrachten;
        }

        public String vraagVoltooidText()
        {
            string label=  "De volgende opdracht is succesvol toegevoegd aan de databank:\nDatum:" + datum.Day.ToString() + "/" + datum.Month.ToString() + "/" + datum.Year.ToString();
            label += "\nMoeilijkheidsGraad:" + moeilijkheid + "\nMaximumScore:" + maxscore + "\n\nDe volgende lln zijn geselecteerd:";
            for (int i = 0; i < namenLln.Count; i++)
            {
                label += "\n" + namenLln[i];
            }
            return label;
        }

        public void maakRekenSom(String opdrachtID)
        {

            for (int s = 0; s < oefeningen.Count; s++)
            {
                opgaveTekst = "";
                oplossingTekst = "";
                for (int i = 0; i < oefeningen[s].Kaartenlijst.Count-1; i++)
                {
                    opgaveTekst += oefeningen[s].Kaartenlijst[i].ToString() + " + ";

                }
                opgaveTekst += oefeningen[s].Kaartenlijst[oefeningen[s].Kaartenlijst.Count-1].ToString() + " = ";
                Console.WriteLine(opgaveTekst);

                int som = 0;
                for (int i = 0; i < oefeningen[s].Kaartenlijst.Count; i++)
                {
                    som += Convert.ToInt32(oefeningen[s].Kaartenlijst[i].Waarde);
                }

                oplossingTekst += som.ToString();

                cmdString = ("INSERT INTO OpdrachtDetail (opgaveTekst,oplossingTekst,opdrachtID) VALUES ('" + opgaveTekst + "','" + oplossingTekst + "'," + opdrachtID + ")");
                cmd = new SqlCommand(cmdString, conn);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }           
        }

        public Boolean rekenSomJuist(Oefening oefening, String antwoord)
        {
            int som;
            if (Int32.TryParse(antwoord, out som))
            {
                return oefening.Antwoorden.Contains(som);
            }
            return false;
        }

        public void vulRekenSomIn(Oefening oefening, int leerlingID, String antwoord)
        {
            int fout = 1;
            if(rekenSomJuist(oefening, antwoord)){
                fout = 0;
            }
            cmdString = ("INSERT INTO LeerlingOpdrachtDetail (antwoordTekst, fout, opdrachtDetailID, leerlingID) VALUES ('" + antwoord + "'," + fout + "'," + oefening.OpdrachtID + "'," + leerlingID + ")");
            cmd = new SqlCommand(cmdString, conn);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}
